<?php defined('SYSPATH') or die('No direct script access.');

/**
 * Gravatar Service Driver Library
 * http://en.gravatar.com/site/implement/url
 *
 * $Id: Gravatar.php 112 2008-09-03 23:47:14Z alex.aperez $
 *
 * @package		Service Module
 * @author		Alex Sancho
 * @copyright	(c) 2008 Alex Sancho
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *	  notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *	  notice, this list of conditions and the following disclaimer in the
 *	  documentation and/or other materials provided with the distribution.
 * 3. Neither the name of copyright holders nor the names of its
 *	  contributors may be used to endorse or promote products derived
 *	  from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.	IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

class Service_Gravatar_Driver extends Service_Driver 
{
	protected $api_url = "www.gravatar.com";
	protected $avatar_path = 'avatar.php';
	protected $email;
	protected $params = array
	(
		'rating' => 'G',
		'size'	 => '80'
	);

	/**
	 *	__construct
	 * 
	 * @param array $config
	 * @return void
	 * @access public
	 * 
	 */
	public function __construct($config = array())
	{
		$config += Kohana::config('service.gravatar');

		foreach($config as $key => $val)
		{
			if (isset($this->params[$key]))
			{
				$this->params[$key] = $val;
			}
			else
			{
				$this->$key = $val;
			}
		}
	}

	/**
	 * is_valid
	 * 
	 * @return boolean
	 * @access public
	 * 
	 */
	public function is_valid()
	{
		if ($response = $this->api_call($this->get_url()))
			return true;
	
		return false;
	}

	/**
	 * get_url
	 * 
	 * @param string $path
	 * @return string
	 * @access public
	 * 
	 */
	public function get_url($path = null) 
	{
		return $this->api_url($path, '&amp;');
	}

	/**
	 * get_gravatar_id
	 * 
	 * @return string
	 * @access public
	 * 
	 */
	public function get_gravatar_id()
	{
		return md5($this->email);
	}

	/**
	 * get_query
	 * 
	 * @return array
	 * @access protected
	 * 
	 */
	protected function get_query()
	{
		return array('gravatar_id' => $this->get_gravatar_id()) + $this->params;
	}

	/**
	 * api_url
	 * 
	 * @param string $path
	 * @param string $separator
	 * @return string
	 * @access protected
	 * 
	 */
	protected function api_url($path = null, $separator = '&') 
	{
		return $this->api_url . '/' 
			. (($path != null) ? $path : $this->avatar_path) . '?' 
			. http_build_query($this->get_query(), null, $separator);
	}

} //End Gravatar Driver